/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * principal.java
 *
 * Created on 29-oct-2012, 13:41:58
 */
package vista;

import Distribuciones.Distribucion;
import control.OptimizacionInventario;
import entidad.FactoryDistribucion;
import entidad.FactoryDistribucion.DISTRIBUCION_NOMBRES;
import java.awt.Color;
import java.text.NumberFormat;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JTextField;

/**
 *
 * @author Operador
 */
public class principal extends javax.swing.JFrame {
    public static final String TOOL_TIP = "ingrese un numero real no negativo (ej: 1.5 )";
    
    private static final String ELIJA_UNA_DISTRIBUCION = "elija una distribucion";
    private javax.swing.JLabel[] parametrosDemandaL;
    private javax.swing.JTextField[] parametrosDemandaTF;
    private javax.swing.JLabel[] parametrosTiempoEntregaL;
    private javax.swing.JTextField[] parametrosTiempoEntregaTF;
    private boolean distribucionDemandaSeleccionada = false;
    private boolean distribucionTiempoEntregaSeleccionada = false;
    private ImageIcon image;
    
    /** Creates new form principal */
    public principal() {
        initComponents();
        inicializar();
//        buttonGroup1.add(politica1RB);
//        buttonGroup1.add(politica2RB);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        buttonGroup1 = new javax.swing.ButtonGroup();
        jPanel2 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        costoUnitarioTF = new javax.swing.JTextField();
        costoPedidoTF = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        costoMantenimientoDiarioTF = new javax.swing.JTextField();
        jLabel6 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        costoFaltanteTF = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        distribucionDemandaCB = new javax.swing.JComboBox();
        demandaParametro1TF = new javax.swing.JTextField();
        demandaParametro2TF = new javax.swing.JTextField();
        distribucionTiempoEntrega = new javax.swing.JComboBox();
        tiempoPedidoParametro2TF = new javax.swing.JTextField();
        tiempoPedidoParametro1TF = new javax.swing.JTextField();
        jLabel7 = new javax.swing.JLabel();
        jSeparator1 = new javax.swing.JSeparator();
        calcularB = new javax.swing.JButton();
        jLabel8 = new javax.swing.JLabel();
        tiempoPedidoParametro1L = new javax.swing.JLabel();
        demandaParametro1L = new javax.swing.JLabel();
        demandaParametro2L = new javax.swing.JLabel();
        tiempoPedidoParametro2L = new javax.swing.JLabel();
        resultadoL = new javax.swing.JLabel();
        jSeparator2 = new javax.swing.JSeparator();
        jLabel9 = new javax.swing.JLabel();
        jLabel10 = new javax.swing.JLabel();
        jLabel11 = new javax.swing.JLabel();
        jLabel12 = new javax.swing.JLabel();
        jPanel1 = new javax.swing.JPanel();
        canvas1 = new java.awt.Canvas();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(new java.awt.GridLayout(1, 0));

        jPanel2.setPreferredSize(new java.awt.Dimension(500, 490));
        jPanel2.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 24)); // NOI18N
        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel1.setText("OPTIMIZADOR DE INVENTARIOS");
        jPanel2.add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 10, 410, -1));

        jLabel3.setText("Costo unitario:");
        jPanel2.add(jLabel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 50, 190, -1));

        costoUnitarioTF.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                costoUnitarioTFKeyTyped(evt);
            }
        });
        jPanel2.add(costoUnitarioTF, new org.netbeans.lib.awtextra.AbsoluteConstraints(240, 50, 130, -1));

        costoPedidoTF.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                costoPedidoTFKeyTyped(evt);
            }
        });
        jPanel2.add(costoPedidoTF, new org.netbeans.lib.awtextra.AbsoluteConstraints(240, 80, 130, -1));

        jLabel4.setText("Costo pedido:");
        jPanel2.add(jLabel4, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 80, 190, -1));

        costoMantenimientoDiarioTF.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                costoMantenimientoDiarioTFKeyTyped(evt);
            }
        });
        jPanel2.add(costoMantenimientoDiarioTF, new org.netbeans.lib.awtextra.AbsoluteConstraints(240, 110, 130, -1));

        jLabel6.setText("Costo faltante:");
        jPanel2.add(jLabel6, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 140, 190, -1));

        jLabel5.setText("Costo mantenimento diario:");
        jPanel2.add(jLabel5, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 110, 190, -1));

        costoFaltanteTF.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                costoFaltanteTFKeyTyped(evt);
            }
        });
        jPanel2.add(costoFaltanteTF, new org.netbeans.lib.awtextra.AbsoluteConstraints(240, 140, 130, -1));

        jLabel2.setText("Distribucion de la Demanda:");
        jPanel2.add(jLabel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 170, 190, -1));

        distribucionDemandaCB.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                distribucionDemandaCBActionPerformed(evt);
            }
        });
        jPanel2.add(distribucionDemandaCB, new org.netbeans.lib.awtextra.AbsoluteConstraints(240, 170, 150, -1));

        demandaParametro1TF.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        demandaParametro1TF.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                demandaParametro1TFKeyTyped(evt);
            }
        });
        jPanel2.add(demandaParametro1TF, new org.netbeans.lib.awtextra.AbsoluteConstraints(170, 200, 30, 20));

        demandaParametro2TF.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        demandaParametro2TF.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                demandaParametro2TFKeyTyped(evt);
            }
        });
        jPanel2.add(demandaParametro2TF, new org.netbeans.lib.awtextra.AbsoluteConstraints(360, 200, 30, 20));

        distribucionTiempoEntrega.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                distribucionTiempoEntregaActionPerformed(evt);
            }
        });
        jPanel2.add(distribucionTiempoEntrega, new org.netbeans.lib.awtextra.AbsoluteConstraints(240, 230, 150, -1));

        tiempoPedidoParametro2TF.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        tiempoPedidoParametro2TF.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                tiempoPedidoParametro2TFKeyTyped(evt);
            }
        });
        jPanel2.add(tiempoPedidoParametro2TF, new org.netbeans.lib.awtextra.AbsoluteConstraints(360, 270, 30, 20));

        tiempoPedidoParametro1TF.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        tiempoPedidoParametro1TF.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                tiempoPedidoParametro1TFKeyTyped(evt);
            }
        });
        jPanel2.add(tiempoPedidoParametro1TF, new org.netbeans.lib.awtextra.AbsoluteConstraints(170, 270, 30, 20));

        jLabel7.setText("Distribucion del tiempo de llegada:");
        jPanel2.add(jLabel7, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 230, 220, -1));
        jPanel2.add(jSeparator1, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 310, 380, 10));

        calcularB.setText("Calcular");
        calcularB.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                calcularBActionPerformed(evt);
            }
        });
        jPanel2.add(calcularB, new org.netbeans.lib.awtextra.AbsoluteConstraints(330, 330, -1, -1));

        jLabel8.setText("de pedido (en dias)");
        jPanel2.add(jLabel8, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 250, 220, -1));

        tiempoPedidoParametro1L.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jPanel2.add(tiempoPedidoParametro1L, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 270, 130, 20));

        demandaParametro1L.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jPanel2.add(demandaParametro1L, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 200, 130, 20));

        demandaParametro2L.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jPanel2.add(demandaParametro2L, new org.netbeans.lib.awtextra.AbsoluteConstraints(220, 200, 130, 20));

        tiempoPedidoParametro2L.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jPanel2.add(tiempoPedidoParametro2L, new org.netbeans.lib.awtextra.AbsoluteConstraints(220, 270, 130, 20));

        resultadoL.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jPanel2.add(resultadoL, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 330, 290, 30));

        jSeparator2.setOrientation(javax.swing.SwingConstants.VERTICAL);
        jPanel2.add(jSeparator2, new org.netbeans.lib.awtextra.AbsoluteConstraints(450, 10, 10, 480));

        jLabel9.setBackground(new java.awt.Color(255, 0, 0));
        jLabel9.setOpaque(true);
        jPanel2.add(jLabel9, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, 380, 30, 30));

        jLabel10.setText("Punto de Inicio / Final");
        jPanel2.add(jLabel10, new org.netbeans.lib.awtextra.AbsoluteConstraints(70, 380, 130, 30));

        jLabel11.setText("Punto optimo");
        jPanel2.add(jLabel11, new org.netbeans.lib.awtextra.AbsoluteConstraints(70, 430, 80, 30));

        jLabel12.setBackground(new java.awt.Color(0, 255, 0));
        jLabel12.setOpaque(true);
        jPanel2.add(jLabel12, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, 430, 30, 30));

        getContentPane().add(jPanel2);

        jPanel1.setLayout(new java.awt.BorderLayout());
        jPanel1.add(canvas1, java.awt.BorderLayout.CENTER);

        getContentPane().add(jPanel1);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void distribucionDemandaCBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_distribucionDemandaCBActionPerformed
        try {
            DISTRIBUCION_NOMBRES selectedItem = (DISTRIBUCION_NOMBRES) distribucionDemandaCB.getSelectedItem();
            String[] distribucionParametros = FactoryDistribucion.getDistribucionParametros(selectedItem);
            int size = distribucionParametros.length;
            for (int i = 0; i < size; i++) {
                String string = distribucionParametros[i];
                parametrosDemandaL[i].setVisible(true);
                parametrosDemandaL[i].setText(string);
                parametrosDemandaTF[i].setVisible(true);
                parametrosDemandaTF[i].setText("");
            }
            if (size == 1) {
                parametrosDemandaL[1].setVisible(false);
                parametrosDemandaL[1].setText("");
                parametrosDemandaTF[1].setVisible(false);
                parametrosDemandaTF[1].setText("");
            }
            distribucionDemandaSeleccionada = true;
        } catch (Exception e) {
            try {
                distribucionDemandaSeleccionada = false;
                for (JLabel p : parametrosDemandaL) {
                    p.setText("");
                    p.setVisible(false);
                }
                for (JTextField p : parametrosDemandaTF) {
                    p.setText("");
                    p.setVisible(false);
                }
            } catch (Exception ex) {
            }
        }
    }//GEN-LAST:event_distribucionDemandaCBActionPerformed

    private void distribucionTiempoEntregaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_distribucionTiempoEntregaActionPerformed
        try {
            DISTRIBUCION_NOMBRES selectedItem = (DISTRIBUCION_NOMBRES) distribucionTiempoEntrega.getSelectedItem();
            String[] distribucionParametros = FactoryDistribucion.getDistribucionParametros(selectedItem);
            int size = distribucionParametros.length;
            for (int i = 0; i < size; i++) {
                String string = distribucionParametros[i];
                parametrosTiempoEntregaL[i].setVisible(true);
                parametrosTiempoEntregaL[i].setText(string);
                parametrosTiempoEntregaTF[i].setVisible(true);
                parametrosTiempoEntregaTF[i].setText("");
            }
            if (size == 1) {
                parametrosTiempoEntregaL[1].setVisible(false);
                parametrosTiempoEntregaL[1].setText("");
                parametrosTiempoEntregaTF[1].setVisible(false);
                parametrosTiempoEntregaTF[1].setText("");
            }
            distribucionTiempoEntregaSeleccionada = true;
        } catch (Exception e) {
            distribucionTiempoEntregaSeleccionada = false;
            try {
                for (JLabel p : parametrosTiempoEntregaL) {
                    p.setText("");
                    p.setVisible(false);
                }
                for (JTextField p : parametrosTiempoEntregaTF) {
                    p.setText("");
                    p.setVisible(false);
                }
            } catch (Exception ex) {
            }
        }
    }//GEN-LAST:event_distribucionTiempoEntregaActionPerformed

    private void demandaParametro1TFKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_demandaParametro1TFKeyTyped
        char l = evt.getKeyChar();
        setTextResultadoL("");
        if(!(Character.isDigit(l) || l == '.' || l == '-')){
            evt.consume();
        }
        if (demandaParametro1TF.getText().length() >= 1) {
            boolean result = isNumber(demandaParametro1TF.getText() + l);
            if (!result) {
                evt.consume();
            }
        }
    }//GEN-LAST:event_demandaParametro1TFKeyTyped

    private void demandaParametro2TFKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_demandaParametro2TFKeyTyped
        char l = evt.getKeyChar();
        setTextResultadoL("");
        if(!(Character.isDigit(l) || l == '.' || l == '-')){
            evt.consume();
        }
        if (demandaParametro2TF.getText().length() >= 1) {
            boolean result = isNumber(demandaParametro1TF.getText() + l);
            if (!result) {
                evt.consume();
            }
        }
    }//GEN-LAST:event_demandaParametro2TFKeyTyped

    private void tiempoPedidoParametro1TFKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tiempoPedidoParametro1TFKeyTyped
        char l = evt.getKeyChar();
        setTextResultadoL("");
        if(!(Character.isDigit(l) || l == '.' || l == '-')){
            evt.consume();
        }
        if (tiempoPedidoParametro1TF.getText().length() >= 1) {
            boolean result = isNumber(demandaParametro1TF.getText() + l);
            if (!result) {
                evt.consume();
            }
        }
    }//GEN-LAST:event_tiempoPedidoParametro1TFKeyTyped

    private void tiempoPedidoParametro2TFKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tiempoPedidoParametro2TFKeyTyped
        char l = evt.getKeyChar();
        setTextResultadoL("");
        if(!(Character.isDigit(l) || l == '.' || l == '-')){
            evt.consume();
        }
        if (tiempoPedidoParametro2TF.getText().length() >= 1) {
            boolean result = isNumber(demandaParametro1TF.getText() + l);
            if (!result) {
                evt.consume();
            }
        }
    }//GEN-LAST:event_tiempoPedidoParametro2TFKeyTyped

    private void costoUnitarioTFKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_costoUnitarioTFKeyTyped
        char l = evt.getKeyChar();
        setTextResultadoL("");
        if(!(Character.isDigit(l) || l == '.')){
            evt.consume();
        }
        if (costoUnitarioTF.getText().length() >= 1) {
            boolean result = isNumber(demandaParametro1TF.getText() + l);
            if (!result) {
                evt.consume();
            }
        }
    }//GEN-LAST:event_costoUnitarioTFKeyTyped

    private void costoPedidoTFKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_costoPedidoTFKeyTyped
        char l = evt.getKeyChar();
        setTextResultadoL("");
        if(!(Character.isDigit(l) || l == '.')){
            evt.consume();
        }
        if (costoPedidoTF.getText().length() >= 1) {
            boolean result = isNumber(demandaParametro1TF.getText() + l);
            if (!result) {
                evt.consume();
            }
        }
    }//GEN-LAST:event_costoPedidoTFKeyTyped

    private void costoMantenimientoDiarioTFKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_costoMantenimientoDiarioTFKeyTyped
        char l = evt.getKeyChar();
        setTextResultadoL("");
        if(!(Character.isDigit(l) || l == '.')){
            evt.consume();
        }
        if (costoMantenimientoDiarioTF.getText().length() >= 1) {
            boolean result = isNumber(demandaParametro1TF.getText() + l);
            if (!result) {
                evt.consume();
            }
        }
    }//GEN-LAST:event_costoMantenimientoDiarioTFKeyTyped

    private void costoFaltanteTFKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_costoFaltanteTFKeyTyped
        char l = evt.getKeyChar();
        setTextResultadoL("");
        if(!(Character.isDigit(l) || l == '.')){
            evt.consume();
        }
        if (costoFaltanteTF.getText().length() >= 1) {
            boolean result = isNumber(demandaParametro1TF.getText() + l);
            if (!result) {
                evt.consume();
            }
        }
    }//GEN-LAST:event_costoFaltanteTFKeyTyped

    private void calcularBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_calcularBActionPerformed
        setTextResultadoL("");
        resultadoL.setIcon(image);
        String validacion = validarCampos();
        if (validacion != null) {
            setTextResultadoL(validacion);
        } else {
            double costoUnitario = Double.parseDouble(costoUnitarioTF.getText());
            double costoPedido = Double.parseDouble(costoPedidoTF.getText());
            double costoMantenimiento = Double.parseDouble(costoMantenimientoDiarioTF.getText());
            double costoFaltante = Double.parseDouble(costoFaltanteTF.getText());
            DISTRIBUCION_NOMBRES dn = (DISTRIBUCION_NOMBRES) distribucionDemandaCB.getSelectedItem();
            String[] tipos = FactoryDistribucion.getDistribucionTipos(dn);
            ArrayList<Object> params = new ArrayList<Object>();
            for (int i = 0; i < tipos.length; i++) {
                String t = tipos[i];
                if (t.equals("int")) {
                    try {
                        params.add(new Integer(parametrosDemandaTF[i].getText()));
                    } catch (NumberFormatException e) {
                        setTextResultadoL("Parametro de demanda \"" + parametrosDemandaL[i].getText() + "\" debe ser entero");
                        
                    }
                } else {
                    params.add(new Double(parametrosDemandaTF[i].getText()));
                }
            }
            Distribucion demanda = FactoryDistribucion.generarDistribucion(dn, params);
            dn = (DISTRIBUCION_NOMBRES) distribucionTiempoEntrega.getSelectedItem();
            tipos = FactoryDistribucion.getDistribucionTipos(dn);
            params.clear();
            for (int i = 0; i < tipos.length; i++) {
                String t = tipos[i];
                if (t.equals("int")) {
                    try {
                        params.add(new Integer(parametrosTiempoEntregaTF[i].getText()));
                    } catch (NumberFormatException e) {
                        setTextResultadoL("Parametro de demanda \"" + parametrosTiempoEntregaL[i].getText() + "\" debe ser entero");
                        
                    }
                } else {
                    params.add(new Double(parametrosTiempoEntregaTF[i].getText()));
                }
            }
            Distribucion tiempoEntrega = FactoryDistribucion.generarDistribucion(dn, params);
            Object[] resultados = OptimizacionInventario.OptimizarQyS(demanda,tiempoEntrega,costoUnitario,costoPedido,costoMantenimiento,costoFaltante,canvas1);
            NumberFormat format = NumberFormat.getCurrencyInstance();
            setTextResultadoL("Q= " + String.valueOf((Integer)resultados[0]) + " S= " + String.valueOf((Integer)resultados[1]) + " costo = " + format.format((Double)resultados[2]));
        }
    }//GEN-LAST:event_calcularBActionPerformed

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        /*try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                System.out.println(info.getName());
                if ("Metal".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }*/
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new principal().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.ButtonGroup buttonGroup1;
    private javax.swing.JButton calcularB;
    private java.awt.Canvas canvas1;
    private javax.swing.JTextField costoFaltanteTF;
    private javax.swing.JTextField costoMantenimientoDiarioTF;
    private javax.swing.JTextField costoPedidoTF;
    private javax.swing.JTextField costoUnitarioTF;
    private javax.swing.JLabel demandaParametro1L;
    private javax.swing.JTextField demandaParametro1TF;
    private javax.swing.JLabel demandaParametro2L;
    private javax.swing.JTextField demandaParametro2TF;
    private javax.swing.JComboBox distribucionDemandaCB;
    private javax.swing.JComboBox distribucionTiempoEntrega;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel10;
    private javax.swing.JLabel jLabel11;
    private javax.swing.JLabel jLabel12;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JSeparator jSeparator2;
    private javax.swing.JLabel resultadoL;
    private javax.swing.JLabel tiempoPedidoParametro1L;
    private javax.swing.JTextField tiempoPedidoParametro1TF;
    private javax.swing.JLabel tiempoPedidoParametro2L;
    private javax.swing.JTextField tiempoPedidoParametro2TF;
    // End of variables declaration//GEN-END:variables

    private void inicializar() {
        image = new ImageIcon(getClass().getResource("/resources/ajax-loader.gif"));
        ArrayList<DISTRIBUCION_NOMBRES> distribuciones = FactoryDistribucion.getDistribucionNames();
        distribucionDemandaCB.addItem(ELIJA_UNA_DISTRIBUCION);
        distribucionTiempoEntrega.addItem(ELIJA_UNA_DISTRIBUCION);
        for (DISTRIBUCION_NOMBRES dn : distribuciones) {
            distribucionDemandaCB.addItem(dn);
            distribucionTiempoEntrega.addItem(dn);
        }
        parametrosDemandaL = new JLabel[2];
        parametrosDemandaL[0] = demandaParametro1L;
        parametrosDemandaL[1] = demandaParametro2L;
        parametrosDemandaTF = new JTextField[2];
        parametrosDemandaTF[0] = demandaParametro1TF;
        parametrosDemandaTF[1] = demandaParametro2TF;
        
        parametrosTiempoEntregaL = new JLabel[2];
        parametrosTiempoEntregaL[0] = tiempoPedidoParametro1L;
        parametrosTiempoEntregaL[1] = tiempoPedidoParametro2L;
        parametrosTiempoEntregaTF = new JTextField[2];
        parametrosTiempoEntregaTF[0] = tiempoPedidoParametro1TF;
        parametrosTiempoEntregaTF[1] = tiempoPedidoParametro2TF;
        
        for (int i = 0; i < parametrosDemandaL.length; i++) {
            parametrosDemandaL[i].setVisible(false);
            parametrosDemandaTF[i].setVisible(false);
            parametrosTiempoEntregaL[i].setVisible(false);
            parametrosTiempoEntregaTF[i].setVisible(false);
        }
        costoFaltanteTF.setToolTipText(TOOL_TIP);
        costoMantenimientoDiarioTF.setToolTipText(TOOL_TIP);
        costoPedidoTF.setToolTipText(TOOL_TIP);
        costoUnitarioTF.setToolTipText(TOOL_TIP);
        jLabel9.setBackground(Color.red);
        jLabel12.setBackground(Color.green);
    }

    /**
     * retorna null si todos los campos
     * han sido llenados corretamente
     * @return String
     */
    private String validarCampos() {
        String texto = costoUnitarioTF.getText();
        if (texto.isEmpty() || !isNumber(texto)) {
            return "Costo Unitario Invalido";
        }
        texto = costoPedidoTF.getText();
        if (texto.isEmpty() || !isNumber(texto)) {
            return "Costo de Pedido Invalido";
        }
        texto = costoMantenimientoDiarioTF.getText();
        if (texto.isEmpty() || !isNumber(texto)) {
            return "Costo de Mantenimiento Invalido";
        }
        texto = costoFaltanteTF.getText();
        if (texto.isEmpty() || !isNumber(texto)) {
            return "Costo de Faltante Invalido";
        }
        if (!distribucionDemandaSeleccionada) {
            return "Seleccione una distribucion para la demanda";
        } else {
            for (int i = 0; i < parametrosDemandaTF.length; i++) {
                JTextField p = parametrosDemandaTF[i];
                if (p.isVisible()) {
                    texto = p.getText();
                    if (texto.isEmpty() || !isNumber(texto)) {
                        return "Parametro de demanda \"" + parametrosDemandaL[i].getText() + "\" Invalido";
                    }
                }
            }
        }
        if (!distribucionTiempoEntregaSeleccionada) {
            return "Seleccione una distribucion para el tiempo de entrega";
        } else {
            for (int i = 0; i < parametrosTiempoEntregaTF.length; i++) {
                JTextField p = parametrosTiempoEntregaTF[i];
                if (p.isVisible()) {
                    texto = p.getText();
                    if (texto.isEmpty() || !isNumber(texto)) {
                        return "Parametro de tiempo de entrega \"" + parametrosTiempoEntregaL[i].getText() + "\" Invalido";
                    }
                }
            }
        }
        return null;
    }

    private boolean isNumber(String string) {
        try {
            Double.parseDouble(string);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }

    private void setTextResultadoL(String mensaje) {
        resultadoL.setIcon(null);
        resultadoL.setText(mensaje);
    }
}
